/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package view;

import com.sun.lwuit.Command;
import com.sun.lwuit.Label;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.layouts.BoxLayout;
import core.IMAPMIDlet;
import core.OrderManager;
import core.RuntimeData;
import core.ScreenEngine;
import core.Settings;
import datamodel.Message;
import network.Connection;
import network.PacketBuilder;
import view.additional.CellItem;
import view.additional.MenuList;
import view.commands.BackCommand;

/**
 *
 * @author Kvest
 */
public class EnterExitForm extends BasicForm implements MenuList.MenuListSelection
{
    private static final int OK_COMMAND_ID = 1;
    
    private static final int OPEN_ITEM_ID = 0;
    private static final int EXIT_WITH_CLOSING_ITEM_ID = 1;
    private static final int EXIT_WITHOUT_CLOSING_ITEM_ID = 2;
    
    private MenuList items;
    
    public EnterExitForm()
    {
        super("enter_exit");
                
        init();
    }
    
    private void init()
    {
        setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        setScrollable(false);
        
        items = new MenuList();
        items.addItem(new CellItem(OPEN_ITEM_ID, "open"));
        items.addItem(new CellItem(EXIT_WITH_CLOSING_ITEM_ID, "exit_with_closing"));
        items.addItem(new CellItem(EXIT_WITHOUT_CLOSING_ITEM_ID, "exit_without_closing"));
        items.setSelectionListener(this);
        addComponent(items);
        
        //Команды
        addCommand(new BackCommand());
        
        Command ok = new Command("ok", OK_COMMAND_ID)
        {
            public void actionPerformed(ActionEvent evt)
            {
                itemSelected(items.getSelectedId());
                
                evt.consume();
            }
        };
        addCommand(ok);
    }
    
    public void itemSelected(int id)
    {
        switch(id)
        {
            case OPEN_ITEM_ID: doOpen(); break;
            case EXIT_WITH_CLOSING_ITEM_ID: exitWithClosing(); break;
            case EXIT_WITHOUT_CLOSING_ITEM_ID: exitWithoutClosing(); break; 
        }
    }
    
    private void doOpen()
    {
        //Если есть соединение - просто возвращаемся на главную
        if (Connection.getConnection().isConnected())
        {
            ScreenEngine.getEngine().popTo(0);
            return;
        }

        //Остановить таймер реконекта
        Connection.getConnection().stopReconnectTimer();

        //Начинаем соединение
        Connection.getConnection().start(Settings.getSettings().getServerIP());

        //Возвращаемся на главную
        ScreenEngine.getEngine().popTo(0);
    }
    
    private void exitWithoutClosing()
    {
	//Отправляем данные для вылогинивания
        RuntimeData runtimeData = IMAPMIDlet.getMidlet().getRuntimeData();
	byte[] data = PacketBuilder.createLogout(runtimeData.getSrvID(), runtimeData.getGUID());
	Connection.getConnection().send(data);
        
        //Закрываем приложение
        IMAPMIDlet.getMidlet().destroyApp(true);
    }
    
    private void exitWithClosing()
    {
        
        //Если есть текущий заказ - не давать закрыть смену
	if (IMAPMIDlet.getMidlet().getOrderManager().currentOrder() != OrderManager.NO_ORDER_ID)
	{
            //Выводим сообщение
            Message message = new Message((new Label("cant_close_relay")).getText());
            message.setTimeout(10000);
            IMAPMIDlet.getMidlet().getMessageManager().newMessage(message);

            return;
	}

        //ToDo Kvest
//        //Если закрываем смену - сбросить фильтр
//        if (type.equals("EndRelay"))
//        {
//            //сохранить фильтр
//            Settings.getSettings().setFilter(regionsFilter.getString(true));
//        }
//        orderManager.clear();
        
        RuntimeData runtimeData = IMAPMIDlet.getMidlet().getRuntimeData();
        
        //Закрываем смену
	byte[] body = PacketBuilder.createPPCUnRegisterOnRelay(true, "EndRelay", runtimeData.getPeopleID());
	byte[] data = PacketBuilder.createSrvTransfereData(PacketBuilder.DEFAULT_CONNECTION_TYPE, runtimeData.getSrvID(), 
                                                           PacketBuilder.DEFAULT_DESTINATION_ID, runtimeData.getGUID(), true, body);
        Connection.getConnection().send(data); 
        
        //Дальше то же самое, что и без закрытия
        exitWithoutClosing();
    }
    
    
}
